package com.firefly.admin.system.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.firefly.admin.common.vo.Result;
import com.firefly.admin.system.entity.FySystemMenu;
import com.firefly.admin.system.entity.FySystemUser;
import com.firefly.admin.system.vo.*;

import java.util.List;
import java.util.Set;

public interface FySystemUserService {
    /**
     * 通过用户名查询管理员账号信息
     *
     * @param userName 用户名称
     * @return 管理员账号列表
     */
    List<FySystemUser> getSystemUserByUserName(String userName);

    /**
     * 获取系统管理员信息接口
     *
     * @param userId 系统管理员ID
     * @return 系统管理员信息
     */
    Result<FySystemUser> getSystemUser(Long userId);

    /**
     * 系统管理员信息新增接口
     *
     * @param fySystemUser 系统管理员信息
     * @return 新增结果
     */
    Result<FySystemUser> add(FySystemUser fySystemUser);

    /**
     * 系统管理员信息编辑接口
     *
     * @param fySystemUser 系统管理员信息
     * @return 编辑结果
     */
    Result<FySystemUser> update(FySystemUser fySystemUser);

    /**
     * 系统管理员信息删除接口
     *
     * @param userIds 管理员ID
     * @return 删除结果
     */
    Result<String> delete(Long[] userIds);

    /**
     * 分页查询系统管理员接口
     *
     * @param systemUserQueryVo 系统管理员查询条件
     * @return 管理员信息列表
     */
    Result<Page<FySystemUser>> getSystemUserList(SystemUserQueryVo systemUserQueryVo);

    /**
     * 系统管理员分配角色接口
     *
     * @param systemUserAssignRolesVo 分配角色信息
     * @return 操作结果
     */
    Result<String> assignRoles(SystemUserAssignRolesVo systemUserAssignRolesVo);

    /**
     * 系统管理员状态修改接口
     *
     * @param systemUserStatusUpdateVo 系统管理员状态编辑参数
     * @return 操作结果
     */
    Result<String> updateStatus(SystemUserStatusUpdateVo systemUserStatusUpdateVo);

    /**
     * 更新管理员账号最后登录时间
     *
     * @param fySystemUser 管理员信息
     */
    void updateLastLoginTime(FySystemUser fySystemUser);

    /**
     * 系统管理员用户名校验接口
     *
     * @param userName 管理员用户名
     * @param userId   管理员ID
     * @return 校验结果
     */
    Result<String> userNameCheck(String userName, Long userId);

    /**
     * 获取系统管理员已选角色接口
     *
     * @param userId 管理员ID
     * @return 查询结果
     */
    Result<List<Long>> getUserRoles(Long userId);

    /**
     * 登录用户密码强度校验接口
     *
     * @return 校验结果
     */
    Result<Integer> passwordStrengthCheck();

    /**
     * 登录用户密码校验接口
     *
     * @return 校验结果
     */
    Result<String> passwordCheck(String loginPwd);

    /**
     * 系统管理员密码修改接口
     *
     * @param systemLoginPwdUpdateVo 系统管理员密码编辑参数
     * @return 操作结果
     */
    Result<FySystemUser> updatePwd(SystemLoginPwdUpdateVo systemLoginPwdUpdateVo);

    /**
     * 系统账号手机号修改接口
     *
     * @param systemUserMobileUpdateVo 系统账号手机号编辑参数
     * @return 操作结果
     */
    Result<FySystemUser> updateMobile(SystemUserMobileUpdateVo systemUserMobileUpdateVo);

    /**
     * 系统账号邮箱修改接口
     *
     * @param systemUserEmailUpdateVo 系统账号邮箱编辑参数
     * @return 操作结果
     */
    Result<FySystemUser> updateEmail(SystemUserEmailUpdateVo systemUserEmailUpdateVo);

    /**
     * 系统账号个人信息修改接口
     *
     * @param fySystemUser 系统账号个人信息编辑参数
     * @return 操作结果
     */
    Result<FySystemUser> updateUserInfo(FySystemUser fySystemUser);

    /**
     * 系统管理员手机号校验接口
     *
     * @param mobile 管理员手机号
     * @param userId 管理员ID
     * @return 校验结果
     */
    Result<String> mobileCheck(String mobile, Long userId);

    /**
     * 系统管理员邮箱校验接口
     *
     * @param email  管理员邮箱
     * @param userId 管理员ID
     * @return 校验结果
     */
    Result<String> emailCheck(String email, Long userId);

    /**
     * 系统管理员重置密码接口
     *
     * @param userId 管理员ID
     * @return 操作结果
     */
    Result<String> resetPassword(Long userId);

    /**
     * 获取所有可用用户
     *
     * @return 用户列表
     */
    List<FySystemUser> getAllUsableUser();

    /**
     * 通过组织机构ID获取用户列表
     *
     * @param orgId 组织机构ID
     * @return 用户列表
     */
    List<FySystemUser> findUserByOrgId(Long orgId);

    /**
     * 根据组织机构ID获取用户列表
     *
     * @param orgIdList 组织机构ID
     * @return 用户列表
     */
    List<FySystemUser> findUserByOrgIds(Set<Long> orgIdList);

    /**
     * 根据用户ID获取用户信息
     *
     * @param userId 用户ID
     * @return 用户信息
     */
    FySystemUser findUserById(Long userId);

    /**
     * 通过用户ID列表查询用户信息列表
     *
     * @param userIds 用户ID列表
     * @return 用户信息列表
     */
    List<FySystemUser> findUserByIds(List<Long> userIds);

    /**
     * 获取用户菜单列表接口
     *
     * @return 菜单列表
     */
    Result<List<FySystemMenu>> getUserMenuList();
}
